"use strict";
/**
 * public    公开的     可以被类内部，子类，类外部访问
 * protected 受保护的   可以被类内部，子类访问
 * private   私有的     可以被类内部访问
 * readonly  只读属性   属性无法修改
 *
 */
// 简写前
class Person {
    constructor(name, age) {
        this.name = name;
        this.age = age;
    }
    speak() {
        console.log(`我叫${this.name}，今年${this.age}岁`);
    }
}
class Student extends Person {
    study() {
        console.log(`${this.name}正在努力学习中......`);
    }
}
const p1 = new Person('tom', 16);
console.log(p1.name, p1.age, p1.speak());
// 简写
class Person1 {
    constructor(name, age) {
        this.name = name;
        this.age = age;
    }
}
const p2 = new Person1('tom1', 18);
console.log(p2.name, p2.age);
// protected 受保护的   可以被类内部，子类访问
class Person2 {
    constructor(name, age) {
        this.name = name;
        this.age = age;
    }
    getDetails() {
        return `我叫：${this.name}，年龄是${this.age}`;
    }
    introduce() {
        console.log(this.getDetails());
    }
}
const p3 = new Person2('tom', 18);
// 这几个属性受保护不能在类外部调用
// p3.name
// p3.age
// p3.getDetails()
p3.introduce();
class Student1 extends Person2 {
    study() {
        console.log(this.getDetails());
        console.log(`${this.name}正在学习`);
    }
}
const s2 = new Student1('tom', 21);
s2.study();
// private   私有的     可以被类内部访问
class Person3 {
    constructor(name, age, IDCard) {
        this.name = name;
        this.age = age;
        this.IDCard = IDCard;
    }
    getPrivateInfo() {
        return `身份证号码为：${this.IDCard}`;
    }
    getInfo() {
        return `我叫${this.name}，今年刚满${this.age}岁`;
    }
    getFullInfo() {
        return this.getInfo() + ',' + this.getPrivateInfo();
    }
}
const p4 = new Person3('tom', 18, '12312321');
// 以下注释表示属性不可访问
// p4.name
// p4.age
// p4.IDCard
// p4.getPrivateInfo()
p4.getInfo();
p4.getFullInfo();
// readonly  只读属性   属性无法修改
class ReadonlyPeroson {
    constructor(vin, year, color, sound) {
        this.vin = vin;
        this.year = year;
        this.color = color;
        this.sound = sound;
    }
    displayInfo() {
        console.log(`
            识别码${this.vin}，
            出厂年份:${this.year}，
            颜色${this.color}，
            音响${this.sound}
        `);
    }
}
